輪廓特徵(Contour Feature)又稱為輪廓描述子(Contour Descriptor),目的是根據影像中的物件輪廓,使用量化的數據,描述物件的輪廓特徵。
多邊形近似(Polygon Approximation)演算法,目的是將輪廓以多邊形表示,並且採用較少的頂點,用來近似原始的輪廓。
OpenCV提供的多邊形近似演算法,是根據 Douglas-Peucker演算法設計,採用遞迴方式分割原始輪廓,其中牽涉的參數稱為ε,是近似過程中的距離誤差值。通常,若ε的值愈小,則近似多邊形輪廓愈接近原始的平滑輪廓。
程式碼如下
import numpy as np
import cv2
import math
def polygon_approximation(f, epislon):
g = f.copy()
nr, nc = f.shape[: 2]
contours, hierarchy = cv2.findContours(f, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)
approx = cv2.approxPolyDP(contours[0], epislon, True)
for x in range(nr):
for y in range(nc):
if f[x, y] != 0:
g[x, y] = 100
cv2.drawContours(g, [approx], -1, (255, 255, 255))
return g
def main():
img1 = cv2.imread("D:/Desktop/IThome/bug.bmp", 0)
img2 = polygon_approximation(img1, 5)
cv2.imshow("Original", img1)
cv2.imshow("After", img2)
cv2.waitKey()
cv2.destroyAllWindows()
main()
上述程式碼選取的ε值為5,結果如下: